package com.gitee.qdbp.base.controlling;

import java.util.List;
import com.gitee.qdbp.base.system.model.IAccount;

/**
 * 通过注解@DataIsolation实现数据隔离<br>
 * 如果具体业务实现时需要查询全部数据(即不需要带隔离条件):<br>
 * 调接口前先禁用 DataIsolationTools.disable("xxx")<br>
 * 调完之后再启用 DataIsolationTools.enable("xxx")<br>
 *
 * @author zhaohuihua
 * @version 170613
 * @see DataIsolationBaseControlling
 */
public class DataIsolationTools {

    private static final String GROUP = "DataIsolation";

    private static IControllingVars vars = ControllingVars.me;

    /** 当前登录账号 **/
    public static void setAccount(IAccount operator) {
        vars.setAccount(operator);
    }

    /** 当前登录账号 **/
    public static IAccount getAccount() {
        return vars.getAccount();
    }

    /** 禁用指定字段的数据隔离 **/
    public static void disable(String field, String... fields) {
        vars.disableDataIsolation(field, fields);
    }

    /** 启用指定字段的数据隔离 **/
    public static void enable(String field, String... fields) {
        vars.enableDataIsolation(field, fields);
    }

    /** 检查指定字段是否启用数据隔离 **/
    public static boolean using(String field) {
        return vars.useDataIsolation(field);
    }

    /** 根据KEY保存数据 **/
    public static void put(String key, Object value) {
        vars.put(GROUP, key, value);
    }

    /** 根据KEY获取数据 **/
    public static Object get(String key) {
        return vars.get(GROUP, key);
    }

    /** 根据KEY获取数据 **/
    public static <T> T get(String key, Class<T> clazz) {
        return vars.get(GROUP, key, clazz);
    }

    /** 根据KEY获取数据 **/
    public static <T> List<T> getList(String key, Class<T> clazz) {
        return vars.getList(GROUP, key, clazz);
    }
}
